/*
 * Copyright 2013-present the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.gateway.server.mvc.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;

public final class TestUtils {

	private TestUtils() {

	}

	public static Map<String, Object> getMap(Map<String, Object> map, String mapKey) {
		assertThat(map).isNotEmpty().containsKey(mapKey);
		Map<String, Object> headers = (Map<String, Object>) map.get(mapKey);
		assertThat(headers).isNotNull();
		Map<String, Object> newHeaders = new HashMap<>();

		// flatten map as mccutchen/go-httpbin only gets lists
		headers.forEach((key, value) -> {
			if (value instanceof List<?> values) {
				if (values.size() == 1) {
					newHeaders.put(key, values.get(0));
				}
				else {
					newHeaders.put(key, values);
				}
			}
			else {
				newHeaders.put(key, value);
			}
		});
		return newHeaders;
	}

}
